// #include "hashtable.h"
// struct HashVec
// {
//     size_t operator()(const vector<int> &vec) const
//     {
//         size_t hash = 0;
//         for (auto e : vec)
//         {
//             hash *= 31;
//             hash %= 13;
//             hash += e;
//         }
//         return hash;
//     }
// };


// struct TestHash
// {
//     int _b;
//     vector<int> _v;
// };

// struct Hash_TestHash
// {
//     int operator()(const TestHash &t) const
//     {
//         std::hash<int> hasher;
//         int hashi = 0;
//         for (auto &e : t._v)
//         {
//             hashi *= 31;
//             hashi += hasher(e);
//         }
//         hashi *= 31;
//         hashi += hasher(t._b);
//         return hashi;
//     }
// };

// bool operator==(const TestHash &h1, const TestHash &h2)
// {
//     return h1._b == h2._b;
// }

// int main()
// {
    // mian_yang::HashTable<int, int>::Test1();

    // unordered_map<vector<int>, int, HashVec> hash; 
    // vector<int> v1 = {1, 2, 3, 4};
    // vector<int> v2 = {2, 2, 3, 4};

    // hash[v1] = 1;
    // hash[v2] = 3;
    // for (auto &[x, y] : hash)
    // {
    //     for (auto e : x)
    //     {
    //         cout << e << " ";
    //     }
    //     cout << ":" << y << endl;
    // }


    // unordered_map<TestHash, int, Hash_TestHash> hash;
    // TestHash h1;
    // h1._b = 1;
    // TestHash h2;
    // h2._b = 1;
    // hash[h1] = 1;
    // hash[h2] = 2;

//     return 0;
// }

#include <vector>
#include <map>
#include <unordered_map>
#include "my_unordered_map.h"
#include "my_unordered_set.h"
int main()
{
    // HashBucket::HashTable<int, int>::Test1();
    // HashBucket::HashTable<int, int>::Test2();
    // unordered_map<int, int> mp;
    // map<int, int> mp;
    // HashBucket::unordered_map<int, int>::Test1();
    // HashBucket::unordered_set<int>::Test1();
    // HashBucket::unordered_map<int, int>::Test3();
    // cout << endl << endl;
    // HashBucket::unordered_set<int>::Test2();
    // cout << endl << endl;

    HashBucket::unordered_map<int, int>::Test4();
    cout << endl;


    return 0;
}